﻿/*
 * zexception.h
 *
 *  Created on: 2015年4月3日
 *      Author: Fifi Lyu
 */

#ifndef INCLUDE_ZPSOE_ZALGORITHM_ZEXCEPTION_H_
#define INCLUDE_ZPSOE_ZALGORITHM_ZEXCEPTION_H_

#include "zpsoe/common.h"
#include <exception>
#include <stdexcept>

using std::exception;

namespace zpsoe {

// ZPSOE_SHARED_LIB_API 导出类中的所有公共数据成员和成员函数
class ZPSOE_SHARED_LIB_API ZpsoeException : public exception {
 private:
    string m_msg;

 public:
    // explicit 只对构造函数起作用，用来抑制隐式转换。
    explicit ZpsoeException(const string &msg, const string &file, int line) throw ();
    virtual ~ZpsoeException() throw ();
    virtual const char* what() const throw ();
};

} /* namespace zpsoe */

#define ThrowZpsoeException(msg) { \
        throw zpsoe::ZpsoeException(msg, __FILE__, __LINE__); \
}

#endif /* INCLUDE_ZPSOE_ZALGORITHM_ZEXCEPTION_H_ */
